package com.msmall.community.album.service;

import java.io.File;
import java.util.List;

import com.msmall.base.pager.PaginationSupport;
import com.msmall.base.service.BaseManager;
import com.msmall.community.album.model.Album;
import com.msmall.community.album.model.Photo;
import com.msmall.community.album.model.Reply;
import com.msmall.community.album.vo.ReplyVO;

public interface AlbumManager extends BaseManager{

	/**
	 * 用户创建相册
	 */
	public void saveAlbum(Album album, Long userid) throws Exception;
	
	/**
	 * 删除相册
	 * @param albumid 被删除的相册ID
	 * @param targetid 相片被移动到
	 */
	public void removeAlbum(Long albumid, Long targetid, Long userid) throws Exception;
	/**
	 * 获得用户所有的相册列表
	 * @param userid 
	 */
	public List<Album> getAlumsByUserid(Long userid) throws Exception;
	
	/**
	 * 通过id查找照片，同时增加图片访问次数
	 */
	public Photo getPhotoByid(Long photoid) throws Exception;
	/**
	 * 通过id查找照片的前一张图片,按时间排序，如果是第一张，跳到最后一张，同时增加图片访问次数
	 */
	public Photo getPhotoPreByid(Long photoid) throws Exception;
	/**
	 * 通过id查找照片的后一张图片,按时间排序，如果是最后一张，跳到第一张，同时增加图片访问次数
	 */
	public Photo getPhotoNextByid(Long photoid) throws Exception;
	/**
	 * 用户上传照片
	 */
	public void uploadImages(File[] images,String[] filenames,  Long albumid, Long userid, Short reply, String uat) throws Exception;
	
	/**
	 * 分页显示一个相册下的相片
	 */
	public void albumList(PaginationSupport page, Long userid, Long albumid) throws Exception;
	
	/**
	 * 访客(userid)进入加密相册时，验证密码
	 * @return
	 */
	public boolean valid(Long albumid, Long userid, String password) throws Exception;
	/**
	 * 给相册设置封面
	 * @return
	 */
	public void setCover(Long albumid, Long photoid, Long userid) throws Exception;
	
	/**
	 * 获得图片的所有评论
	 */
	public List<ReplyVO> getReplysByPhotoid(Long photoid, Short enabled)throws Exception;
	
	/**
	 * 验证Photo.reply content
	 * @return 1:正常；2字符太少；3字符太多;4含有非法字符
	 */
	public int validateReplyContent(String content);
	
	/**
	 * 同时增加图片评论回答数量
	 */
	public Reply savePhotoReply(Reply reply, Long userid, String uat) throws Exception;
	
}
